#include "cnc/default_tuner.h"
#include "TileTag.hpp"
#include "constants.h"

// template <> size_t cnc_tag_hash_compare< TileTag<TILETAGDIMMACRO, TASKDIMMACRO> >::hash
// (const TileTag<TILETAGDIMMACRO, TASKDIMMACRO>& tt) const;

// template <> bool cnc_tag_hash_compare< TileTag<TILETAGDIMMACRO, TASKDIMMACRO>  >::equal
// (const TileTag<TILETAGDIMMACRO, TASKDIMMACRO>& a, const TileTag<TILETAGDIMMACRO, TASKDIMMACRO>& b) const;

// template <> 
// size_t cnc_tag_hash_compare< TileTag<TILETAGDIMMACRO, TASKDIMMACRO> >::hash
// (const TileTag<TILETAGDIMMACRO, TASKDIMMACRO>& tt) const
// {
//   size_t res=0;
//   // for (int i=0; i<TASKDIMMACRO; ++i) os << t[i] << ",";
//   return ( (tt[0]) << 19 ) + ( tt[1] << 7 ) + tt[2];
// }

// template <> 
// bool cnc_tag_hash_compare< TileTag<TILETAGDIMMACRO, TASKDIMMACRO>  >::equal
// (const TileTag<TILETAGDIMMACRO, TASKDIMMACRO>& a, const TileTag<TILETAGDIMMACRO, TASKDIMMACRO>& b) const
// {
//   return a == b;
// }

// template <> //<int TILETAGDIMMACRO, int TASKDIMMACRO>
// std::ostream & cnc_format( std::ostream& os, const TileTag<TILETAGDIMMACRO, TASKDIMMACRO> & t )
// {
//   os << "(";
//   for (int i=0; i<TASKDIMMACRO; ++i) os << t[i] << ",";
//   os << ")";
//   return os;
// }

// template <int TILETAGDIMMACRO, int TASKDIMMACRO>
// ostream& operator<< (ostream& stream, TileTag<TILETAGDIMMACRO, TASKDIMMACRO> const &t) {  
//   for (int64_t i=0; i<TILETAGDIMMACRO; ++i)
//     stream << t[i] << " ";  
//   return stream;
// }
